package com.hong.garen.outdevice;

/**
 * 告警规则开发
 * 1.实现json数据接收、解析、判断
 * 2.实现数据超标发送信息，设备掉线预警
 * 3.实现数据过滤和清洗，多线程异步
 * Created by GarenHong  on 2023/3/3.
 */
import com.hong.garen.qingjiao.qjSqlStruct;
import com.hong.garen.qingjiao.qjpressureDao;
import com.hong.garen.qingjiao.qjpressureDaoImpl;
import net.sf.json.JSONArray;
import net.sf.json.JSONException;
import net.sf.json.JSONObject;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
/**
 * 告警规则开发
 * 1.实现json数据接收、解析、判断
 * 2.实现数据超标发送信息，设备掉线预警
 * 3.实现数据过滤和清洗，多线程异步
 * Created by GarenHong  on 2023/2/28.
 * 同一类型设备，多个设备数据
 * json格式：{"艾溪湖大桥new-倾角仪18":[{"values":{"measureX":3.1,"measureY":10.37,"measureZ":5.87,"Temperature":11.80},"ts":1678929205}],
 *           "艾溪湖大桥new-倾角仪17":[{"values":{"measureX":5.8,"measureY":10.36,"measureZ":4.92,"Temperature":12.080},"ts":1679029205}],
 *           "艾溪湖大桥new-倾角仪16":[{"values":{"measureX":2.82,"measureY":13.346,"measureZ":3.29,"Temperature":18.4080},"ts":1678929205}]}
 * */
public class OutqjMessigeContents {
    static String KeyValue, KeyName;
    static JSONObject Arr;
    static JSONObject dataBean;
    public static void Outqjreciveinformation(String json) throws Exception {
        JSONObject root = JSONObject.fromObject(json);
       //  System.out.println("将json格式的字符串转换成json:" + root);
       // String plate1 = root.getString("deviceId");//根据json对象中的数据名解析出相应数据，测得的核心数据
        String properties = root.getString("properties");//根据json对象中的数据名解析出相应数据，时间戳
      //  System.out.println( "第二次解析键值（数组）的数据:" + properties);
        JSONObject root1 = JSONObject.fromObject(properties);
        String deviceName = root1.getString("deviceName");//根据json对象中的数据名解析出相应数据，测得的核心数据
        Double Temperature = root1.getDouble("Temperature");//根据json对象中的数据名解析出相应数据，测得的核心数据
        Double measureX = root1.getDouble("measureX");//根据json对象中的数据名解析出相应数据，测得的核心数据
        Double measureY = root1.getDouble("measureY");//根据json对象中的数据名解析出相应数据，测得的核心数据
     //   System.out.println( "第三次解析键值（数组）的数据:" + deviceName + "\n" + Temperature + "\n" + measureX);
        String mailmes;
        if (measureX != null &&measureX < 10.9) {
            System.out.print("X方向数据未超标\n");
            mailmes = "";
        } else {
            System.out.print("X方向数据超标\n");
            //  MailSendSample.main(KeyName + "告警消息", "X方向数据超标");   //邮件通知
            mailmes = "X方向数据超标，" + "当前数据：" + measureX + "<br>";
        }
        if (measureY != null && measureY < 10.6) {
            System.out.print("Y方向数据未超标\n");
        } else {
            System.out.print("Y方向数据超标\n");
            mailmes = mailmes +"Y方向数据超标，" + "当前数据：" + measureY + "<br>";
        }
        if (Temperature!= null && Temperature < 30.5) {
            System.out.print("温度数据未超标\n");
        } else {
            System.out.print("温度数据超标");
            mailmes =  mailmes + "温度数据超标，" + "当前数据：" + Temperature;
        }
         //  MySqlInset(intArrval[0], intArrval[1], intArrval[2], intArrval[3], time3 , KeyName);  //插入数据库
        //  MailSendSample.main(KeyName + "：告警消息", mailmes);   //邮件通知
        //String plate2 = root.getString("properties");//根据json对象中的数据名解析出相应数据，时间戳
//        for (int i = 0; i < root.size(); i++) {
//
//          //  dataBean = (JSONObject) Arr.get(i);//得到数组中对应下标对应的json对象
//            //System.out.println( "第二次解析键值（数组）的数据:"+dataBean );
//            String plate1 = root.getString("deviceId");//根据json对象中的数据名解析出相应数据，测得的核心数据
//            String plate2 = root.getString("properties");//根据json对象中的数据名解析出相应数据，时间戳
//            System.out.println( "第二次解析键值（数组）的数据:"+plate1 + plate2);
//
//        }
        //2.去掉大括号，取出Key和对应的键值
        // First(root);
//        try {
//            Iterator iterator = root.keys();
//            while (iterator.hasNext()) {
//                KeyName = (String) iterator.next();
//                KeyValue = root.getString(KeyName);
//                System.out.println("Key1:"+ KeyName +"\n" +"key1值:"+KeyValue);
//            }
//                Arr = root.getJSONObject(KeyValue);//根据json对象中数组的key解析出其所对应的值
//                dataBean = JSONObject.fromObject(Arr);
//                System.out.println(Arr.size() );
//            System.out.println(dataBean );
//                Second(String.valueOf(Arr));
//        } catch (JSONException e) {
//            e.printStackTrace();
//        }
//


    }
    public static void Second(String plate1) {
//        for (int i = 0; i < Arr.size(); i++) {
//
//          //  dataBean = (JSONObject) Arr.get(i);//得到数组中对应下标对应的json对象
//            //System.out.println( "第二次解析键值（数组）的数据:"+dataBean );
//            plate1 = Arr.getString("deviceName");//根据json对象中的数据名解析出相应数据，测得的核心数据
//            plate2 = Arr.getString("Temperature");//根据json对象中的数据名解析出相应数据，时间戳
//            System.out.println( "第二次解析键值（数组）的数据:"+plate1 );
//
//        }
////        //时间戳转化为时间
////        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
////        Date time2 = new Date(Long.valueOf(plate2) * 1000L);
////        String time3 = sdf.format(time2);
////        // System.out.print("plate1" + plate1);
////        //4.第三次解析测出的数据
        JSONObject map = JSONObject.fromObject(plate1);
        int count = 0;
        String intArrkey[] = new String[map.size()];
    //    Double intArrval[] = new Double[map.size()];

        for (Object key : map.keySet()) {
            intArrkey[count] = (String) key;
          //  intArrval[count] = (Double) map.get(key);
            count++;
            System.out.println(intArrkey[count]);
        }
        String mailmes;
//        if (intArrval[0] != null && intArrval[0] < 10.9) {
//            System.out.print("X方向数据未超标\n");
//            mailmes = "";
//        } else {
//            System.out.print("X方向数据超标\n");
//            //  MailSendSample.main(KeyName + "告警消息", "X方向数据超标");   //邮件通知
//            mailmes = "X方向数据超标，" + "当前数据：" + intArrval[0] + "<br>";
//        }
//        if (intArrval[1] != null && intArrval[1] < 10.6) {
//            System.out.print("Y方向数据未超标\n");
//        } else {
//            System.out.print("Y方向数据超标\n");
//            mailmes = mailmes +"Y方向数据超标，" + "当前数据：" + intArrval[1] + "<br>";
//        }
//        if (intArrval[2] != null && intArrval[2] < 10.3) {
//            System.out.print("Z方向数据未超标\n");
//        } else {
//            System.out.print("Z方向数据超标\n");
//            mailmes =  mailmes + "Z方向数据超标，" + "当前数据：" + intArrval[2] + "<br>";
//        }
//        if (intArrval[3] != null && intArrval[3] < 30.5) {
//            System.out.print("温度数据未超标\n");
//        } else {
//            System.out.print("温度数据超标");
//            mailmes =  mailmes + "温度数据超标，" + "当前数据：" + intArrval[3];
//        }

     //   MySqlInset(intArrval[0], intArrval[1], intArrval[2], intArrval[3], time3 , KeyName);  //插入数据库
        //  MailSendSample.main(KeyName + "：告警消息", mailmes);   //邮件通知
    }
    public static void MySqlInset(Double data0, Double data1, Double data2, Double data3, String time ,String devicename) {
        try {
            qjSqlStruct pressure = new qjSqlStruct(data0, data1, data2, data3, time , devicename);
            qjpressureDao pressureDao = new qjpressureDaoImpl();
            pressureDao.insertData1(pressure,"qj_datas");//插入数据，对应的数据表
            System.out.println("\n插入数据库成功！");
        } catch (Exception e) {
            System.out.println("\n插入数据库失败！");
        }
    }
}
